From feccad0fee6b9c9dc1e3976f6f58f256cc222912 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sun, 5 Jun 2016 00:19:55 -0700 Subject: [PATCH] Don't lock overrides if we're updating them There was already a function for this, `keep`, it was just forgotten to be called. Closes #2766 --- src/cargo/ops/cargo_generate_lockfile.rs | 6 ++-- src/cargo/ops/resolve.rs | 4 ++- tests/overrides.rs | 39 ++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/cargo/ops/cargo_generate_lockfile.rs b/src/cargo/ops/cargo_generate_lockfile.rs index 9b96abd75..14c3322c5 100644 --- a/src/cargo/ops/cargo_generate_lockfile.rs +++ b/src/cargo/ops/cargo_generate_lockfile.rs @@ -37,10 +37,8 @@ pub fn update_lockfile(manifest_path: &Path, let package = try!(Package::for_path(manifest_path, opts.config)); let previous_resolve = match try!(ops::load_pkg_lockfile(&package, opts.config)) { - Some(resolve) => resolve, - None => { - return generate_lockfile(manifest_path, opts.config); - } + Some(resolve) => resolve, + None => return generate_lockfile(manifest_path, opts.config), }; let mut registry = PackageRegistry::new(opts.config); let mut to_avoid = HashSet::new(); diff --git a/src/cargo/ops/resolve.rs b/src/cargo/ops/resolve.rs index adc3e6ae4..5f7454655 100644 --- a/src/cargo/ops/resolve.rs +++ b/src/cargo/ops/resolve.rs @@ -105,7 +105,9 @@ pub fn resolve_with_previous<'a>(registry: &mut PackageRegistry, let replace = package.manifest().replace(); let replace = replace.iter().map(|&(ref spec, ref dep)| { for (key, val) in r.replacements().iter() { - if spec.matches(key) && dep.matches_id(val) { + if spec.matches(key) && + dep.matches_id(val) && + keep(&val, to_avoid, &to_avoid_sources) { return (spec.clone(), dep.clone().lock_to(val)) } } diff --git a/tests/overrides.rs b/tests/overrides.rs index 2f87638f0..b4a385fb8 100644 --- a/tests/overrides.rs +++ b/tests/overrides.rs @@ -578,3 +578,42 @@ Please re-run this command with [..] [..]#foo:0.1.0 ")); } + +#[test] +fn update() { + Package::new("foo", "0.1.0").publish(); + + let foo = git::repo(&paths::root().join("override")) + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.1.0" + authors = [] + "#) + .file("src/lib.rs", "pub fn foo() {}"); + foo.build(); + + let p = project("local") + .file("Cargo.toml", &format!(r#" + [package] + name = "local" + version = "0.0.1" + authors = [] + + [dependencies] + foo = "0.1.0" + + [replace] + "foo:0.1.0" = {{ git = '{0}' }} + "#, foo.url())) + .file("src/lib.rs", ""); + + assert_that(p.cargo_process("generate-lockfile"), + execs().with_status(0)); + assert_that(p.cargo("update"), + execs().with_status(0) + .with_stderr("\ +[UPDATING] registry `[..]` +[UPDATING] git repository `[..]` +")); +} -- 2.30.2